package educar.gui;

import java.awt.event.*;


import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JTabbedPane;
import javax.swing.JList;
import javax.swing.JLayeredPane;

import java.awt.Color;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JSeparator;

import educar.controllers.DocenteActividadesController;
import educar.controllers.DocenteResolucionesController;

public class DocenteView extends JFrame implements IView
{
    private static final long serialVersionUID = 1L;
    private static final String CREARACTIVIDAD      = "Crear Actividad";
    public static final String DESCARGARRESOLUCION = "Descargar Resolucion";
    public static final String CALIFICAR           = "Calificar";

    GenericListener listener;

    private JPanel contentPane;

    private JTextField resolucionesNotaField;
    private JTextField actividadesDescripcionField;
    private JLabel actividadesMateriaALabel;
    private JLabel actividadesCodigoALabel;
    private JLabel resolucionesMateriaALabel;
    private JLabel resolucionesDescripcionALabel;
    private JLabel resolucionesCodigoALabel;
    private JLabel datosPersonalesActualDniLabel;
    private JLabel datosPersonalesActualNombreLabel;
    private JLabel datosPersonalesActualApellidoLabel;
    private JLabel resolucionesNombreALabel;
    private JLabel resolucionesApellidoALabel;
    private JLabel resolucionesDniALabel;

    JList actividadesMateriasList;
    JList actividadesActCreadasList;
    JList resolucionesMateriasList;
    JList resolucionesResolucionesList;
    JList resolucionesActividadesList;

    public void present(String model)
    {
        JOptionPane.showMessageDialog(null, model);
    }

    /**
     * Create the frame.
     */
    public DocenteView()
    {
        listener = new GenericListener();

        this.setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 971, 600);

        setMenu();

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTabbedPane educarPane = new JTabbedPane(JTabbedPane.TOP);
        educarPane.setBounds(5, 5, 960, 590);
        contentPane.add(educarPane);

        setPestanaDatosPersonales(educarPane);
        setPestanaActividades(educarPane);
        setPestanaResoluciones(educarPane);
    }

    public void setMenu()
    {
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu educarMenu = new JMenu("Educar");
        menuBar.add(educarMenu);

        JMenuItem salirMenuItem = new JMenuItem("Salir");
        educarMenu.add(salirMenuItem);
        salirMenuItem.addActionListener(
            new ActionListener()
        {
            public void actionPerformed(ActionEvent evento)
            {
                System.exit(0);
            }
        });
    }

    public void setPestanaDatosPersonales(JTabbedPane educarPane)
    {
        //pestana datosPersonales
        JLayeredPane datosPersonalesPestana = new JLayeredPane();
        educarPane.addTab("Datos Personales", null, datosPersonalesPestana, null);

        datosPersonalesPestana.setLayout(null);

        JLayeredPane datosPersonalesPane = new JLayeredPane();
        datosPersonalesPane.setBackground(Color.GRAY);
        datosPersonalesPane.setBounds(118, 12, 653, 443);
        datosPersonalesPestana.add(datosPersonalesPane);

        JLabel datosPersonalesDniLabel = new JLabel("DNI:");
        datosPersonalesDniLabel.setBounds(148, 159, 70, 15);
        datosPersonalesPane.add(datosPersonalesDniLabel);

        JLabel datosPersonalesNombreLabel = new JLabel("Nombre:");
        datosPersonalesNombreLabel.setBounds(148, 186, 70, 15);
        datosPersonalesPane.add(datosPersonalesNombreLabel);

        JLabel datosPersonalesApellidoLabel = new JLabel("Apellido:");
        datosPersonalesApellidoLabel.setBounds(148, 213, 70, 15);
        datosPersonalesPane.add(datosPersonalesApellidoLabel);

        datosPersonalesActualDniLabel = new JLabel();
        datosPersonalesActualDniLabel.setBounds(230, 159, 120, 15);
        datosPersonalesPane.add(datosPersonalesActualDniLabel);

        datosPersonalesActualNombreLabel = new JLabel("NombreActual");
        datosPersonalesActualNombreLabel.setBounds(230, 186, 214, 15);
        datosPersonalesPane.add(datosPersonalesActualNombreLabel);

        datosPersonalesActualApellidoLabel = new JLabel("ApellidoActual");
        datosPersonalesActualApellidoLabel.setBounds(230, 213, 214, 15);
        datosPersonalesPane.add(datosPersonalesActualApellidoLabel);


    }


    //En esta pestaña en la jlist de actividades se muestran
    //las que pertenecen a la materia seleccionada
    public void setPestanaActividades(JTabbedPane educarPane)
    {
        //pestana actividades
        JLayeredPane actividadesPestana = new JLayeredPane();
        educarPane.addTab("Actividades", null, actividadesPestana, null);


        JLayeredPane actividadesPane = new JLayeredPane();
        actividadesPane.setBounds(224, 12, 490, 443);
        actividadesPestana.add(actividadesPane);
        actividadesPane.setBackground(Color.GRAY);

        JLabel actividadesMateriaLabel = new JLabel("Materia:");
        actividadesMateriaLabel.setBounds(88, 138, 70, 15);
        actividadesPane.add(actividadesMateriaLabel);

        actividadesMateriaALabel = new JLabel();
        actividadesMateriaALabel.setBounds(200, 136, 216, 19);
        actividadesPane.add(actividadesMateriaALabel);

        actividadesDescripcionField = new JTextField();
        actividadesDescripcionField.setBounds(200, 166, 189, 19);
        actividadesPane.add(actividadesDescripcionField);

        JLabel actividadesDescripcionLabel = new JLabel("Descripcion");
        actividadesDescripcionLabel.setBounds(88, 168, 100, 15);
        actividadesPane.add(actividadesDescripcionLabel);

        actividadesCodigoALabel = new JLabel();
        actividadesCodigoALabel.setBounds(151, 194, 57, 19);
        actividadesPane.add(actividadesCodigoALabel);

        JLabel actividadesCodigoLabel = new JLabel("Codigo:");
        actividadesCodigoLabel.setBounds(88, 198, 70, 15);
        actividadesPane.add(actividadesCodigoLabel);

        JButton actividadesCrearActividadButton = new JButton(CREARACTIVIDAD);
        actividadesCrearActividadButton.setBounds(254, 260, 162, 25);
        actividadesPane.add(actividadesCrearActividadButton);


        JScrollPane actividadesMateriasScrollPane = new JScrollPane();
        actividadesMateriasScrollPane.setBounds(12, 42, 200, 443);
        actividadesPestana.add(actividadesMateriasScrollPane);
        actividadesMateriasList = new JList();
        actividadesMateriasScrollPane.setViewportView(actividadesMateriasList);
        actividadesMateriasList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        actividadesMateriasList.setBackground(Color.WHITE);


        JScrollPane actividadesActCreadasScrollPane = new JScrollPane();
        actividadesActCreadasScrollPane.setBounds(712, 42, 200, 443);
        actividadesPestana.add(actividadesActCreadasScrollPane);
        actividadesActCreadasList = new JList();
        actividadesActCreadasScrollPane.setViewportView(actividadesActCreadasList);
        actividadesActCreadasList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        actividadesActCreadasList.setBackground(Color.WHITE);

        JLabel actividadesListaDeMateriasLabel = new JLabel("Lista de materias");
        actividadesListaDeMateriasLabel.setBounds(12, 12, 135, 15);
        actividadesPestana.add(actividadesListaDeMateriasLabel);

        JLabel actividadesActCreadasLabel = new JLabel("Actividades creadas");
        actividadesActCreadasLabel.setBounds(712, 12, 163, 15);
        actividadesPestana.add(actividadesActCreadasLabel);

        actividadesMateriasList.setName("actividadesMateriasList");
        actividadesActCreadasList.setName("actividadesActCreadasList");

        DocenteActividadesController c = new DocenteActividadesController();
        c.setView(this);
        listener.associate(actividadesCrearActividadButton, c);
        listener.associate(actividadesMateriasList, c);
        listener.associate(actividadesActCreadasList, c);
    }

    public void setPestanaResoluciones(JTabbedPane educarPane)
    {
        //pestana resoluciones
        JLayeredPane resolucionesPestana = new JLayeredPane();
        educarPane.addTab("Resoluciones", null, resolucionesPestana, null);


        JLayeredPane resolucionesPane = new JLayeredPane();
        resolucionesPane.setBounds(224, 12, 490, 443);
        resolucionesPestana.add(resolucionesPane);
        resolucionesPane.setBackground(Color.GRAY);

        JLabel resolucionesMateriaLabel = new JLabel("Materia:");
        resolucionesMateriaLabel.setBounds(88, 70, 70, 15);
        resolucionesPane.add(resolucionesMateriaLabel);

        resolucionesMateriaALabel = new JLabel();
        resolucionesMateriaALabel.setBounds(170, 66, 102, 19);
        resolucionesPane.add(resolucionesMateriaALabel);

        resolucionesDescripcionALabel = new JLabel();//pinta
        resolucionesDescripcionALabel.setBounds(212, 93, 266, 19);
        resolucionesPane.add(resolucionesDescripcionALabel);

        JLabel resolucionesDescripcionLabel = new JLabel("Descripcion:");
        resolucionesDescripcionLabel.setBounds(88, 97, 102, 15);
        resolucionesPane.add(resolucionesDescripcionLabel);

        resolucionesCodigoALabel = new JLabel();
        resolucionesCodigoALabel.setBounds(154, 120, 64, 19);
        resolucionesPane.add(resolucionesCodigoALabel);

        JLabel resolucionesCodigoLabel = new JLabel("Codigo:");
        resolucionesCodigoLabel.setBounds(88, 124, 70, 15);
        resolucionesPane.add(resolucionesCodigoLabel);

        JButton resolucionesDescargar = new JButton(DESCARGARRESOLUCION);
        resolucionesDescargar.setBounds(170, 339, 190, 25);
        resolucionesPane.add(resolucionesDescargar);

        JSeparator separator = new JSeparator();
        separator.setBounds(12, 165, 466, 15);
        resolucionesPane.add(separator);

        JLabel resolucionesResolucionLabel = new JLabel("Resolucion");
        resolucionesResolucionLabel.setBounds(22, 178, 102, 15);
        resolucionesPane.add(resolucionesResolucionLabel);

        JLabel resolucionesDatosAlumnoLabel = new JLabel("Datos de Aumno");
        resolucionesDatosAlumnoLabel.setBounds(43, 205, 140, 15);
        resolucionesPane.add(resolucionesDatosAlumnoLabel);

        JLabel resolucionesNombreLabel = new JLabel("Nombre:");
        resolucionesNombreLabel.setBounds(88, 242, 70, 15);
        resolucionesPane.add(resolucionesNombreLabel);

        JLabel resolucionesApellidoLabel = new JLabel("Apellido:");
        resolucionesApellidoLabel.setBounds(88, 269, 70, 15);
        resolucionesPane.add(resolucionesApellidoLabel);

        JLabel resolucionesDniLabel = new JLabel("DNI:");
        resolucionesDniLabel.setBounds(88, 296, 70, 15);
        resolucionesPane.add(resolucionesDniLabel);

        JLabel resolucionesNotaLabel = new JLabel("Nota");
        resolucionesNotaLabel.setBounds(88, 392, 44, 15);
        resolucionesPane.add(resolucionesNotaLabel);

        resolucionesNotaField = new JTextField();
        resolucionesNotaField.setBounds(140, 390, 132, 19);
        resolucionesPane.add(resolucionesNotaField);
        resolucionesNotaField.setColumns(10);

        JButton resolucionesCalificarButton = new JButton(CALIFICAR);
        resolucionesCalificarButton.setBounds(333, 387, 91, 25);
        resolucionesPane.add(resolucionesCalificarButton);

        resolucionesNombreALabel = new JLabel();
        resolucionesNombreALabel.setBounds(154, 242, 140, 15);
        resolucionesPane.add(resolucionesNombreALabel);

        resolucionesApellidoALabel = new JLabel();
        resolucionesApellidoALabel.setBounds(154, 269, 140, 15);
        resolucionesPane.add(resolucionesApellidoALabel);

        resolucionesDniALabel = new JLabel();
        resolucionesDniALabel.setBounds(154, 296, 118, 15);
        resolucionesPane.add(resolucionesDniALabel);

        JScrollPane resolucionesMateriasScrollPane = new JScrollPane();
        resolucionesMateriasScrollPane.setBounds(12, 32, 200, 219);
        resolucionesPestana.add(resolucionesMateriasScrollPane);
        resolucionesMateriasList = new JList();
        resolucionesMateriasScrollPane.setViewportView(resolucionesMateriasList);
        resolucionesMateriasList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        resolucionesMateriasList.setBackground(Color.WHITE);
        resolucionesMateriasList.setName("resolucionesMateriasList");

        JScrollPane resolucionesActividadesScrollPane = new JScrollPane();
        resolucionesActividadesScrollPane.setBounds(12, 280, 200, 219);
        resolucionesPestana.add(resolucionesActividadesScrollPane);
        resolucionesActividadesList = new JList();
        resolucionesActividadesScrollPane.setViewportView(resolucionesActividadesList);
        resolucionesActividadesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        resolucionesActividadesList.setBackground(Color.WHITE);
        resolucionesActividadesList.setName("resolucionesActividadesList");

        JScrollPane resolucionesResolucionesScrollPane = new JScrollPane();
        resolucionesResolucionesScrollPane.setBounds(712, 42, 200, 443);
        resolucionesPestana.add(resolucionesResolucionesScrollPane);
        resolucionesResolucionesList = new JList();
        resolucionesResolucionesScrollPane.setViewportView(resolucionesResolucionesList);
        resolucionesResolucionesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        resolucionesResolucionesList.setBackground(Color.WHITE);
        resolucionesResolucionesList.setName("resolucionesResolucionesList");

        JLabel resolucionesListaDeMateriasLabel = new JLabel("Lista de materias");
        resolucionesListaDeMateriasLabel.setBounds(12, 12, 135, 15);
        resolucionesPestana.add(resolucionesListaDeMateriasLabel);

        JLabel resolucionesResolucionesLabel = new JLabel("Lista de resoluciones");
        resolucionesResolucionesLabel.setBounds(712, 12, 174, 15);
        resolucionesPestana.add(resolucionesResolucionesLabel);

        JLabel resolucionesListaDeActividadesLabel = new JLabel("Lista de actividades");
        resolucionesListaDeActividadesLabel.setBounds(12, 263, 150, 15);
        resolucionesPestana.add(resolucionesListaDeActividadesLabel);


        DocenteResolucionesController c = new DocenteResolucionesController();
        c.setView(this);
        listener.associate(resolucionesDescargar, c);
        listener.associate(resolucionesCalificarButton, c);
        listener.associate(resolucionesActividadesList, c);
        listener.associate(resolucionesMateriasList, c);
        listener.associate(resolucionesResolucionesList, c);
    }


    //listas

    public void setActividadesMaterias(String[] a)
    {
        actividadesMateriasList.setListData(a);
    }

    public void setActividadesCreadas(String[] a)
    {
        actividadesActCreadasList.setListData(a);
    }

    public void setResolucionesMaterias(String[] a)
    {
        resolucionesMateriasList.setListData(a);
    }

    public void setResoluciones(String[] a)
    {
        resolucionesResolucionesList.setListData(a);
    }

    public void setResolucionesActividades(String[] a)
    {
        resolucionesActividadesList.setListData(a);
    }


    //labels datos personales

    public void setDPNombre(String nombre)
    {
        datosPersonalesActualNombreLabel.setText(nombre);
    }

    public String getDPNombre()
    {
        return datosPersonalesActualNombreLabel.getText();
    }

    public void setDPApellido(String apellido)
    {
        datosPersonalesActualApellidoLabel.setText(apellido);
    }

    public String getDPApellido()
    {
        return datosPersonalesActualApellidoLabel.getText();
    }

    public void setDPDni(String dni)
    {
        datosPersonalesActualDniLabel.setText(dni);
    }

    public String getDPDni()
    {
        return datosPersonalesActualDniLabel.getText();
    }

    //labels actividades

    public void setAMateria(String materia)
    {
        actividadesMateriaALabel.setText(materia);
    }

    public String getAMateria()
    {
        return actividadesMateriaALabel.getText();
    }

    public void setADescripcion(String desc)
    {
        actividadesDescripcionField.setText(desc);
    }

    public String getADescripcion()
    {
        return actividadesDescripcionField.getText();
    }

    public void setACodigo(String codigo)
    {
        actividadesCodigoALabel.setText(codigo);
    }

    public String getACodigo()
    {
        return actividadesCodigoALabel.getText();
    }

    //labels resoluciones

    public void setRMateria(String materia)
    {
        resolucionesMateriaALabel.setText(materia);
    }

    public String getRMateria()
    {
        return resolucionesMateriaALabel.getText();
    }

    public void setRDescripcion(String desc)
    {
        resolucionesDescripcionALabel.setText(desc);
    }

    public String getRDescripcion()
    {
        return resolucionesDescripcionALabel.getText();
    }

    public void setRCodigo(String codigo)
    {
        resolucionesCodigoALabel.setText(codigo);
    }

    public String getRCodigo()
    {
        return resolucionesCodigoALabel.getText();
    }

    public void setRNombre(String nombre)
    {
        resolucionesNombreALabel.setText(nombre);
    }

    public String getRNombre()
    {
        return resolucionesNombreALabel.getText();
    }

    public void setRApellido(String apellido)
    {
        resolucionesApellidoALabel.setText(apellido);
    }

    public String getRApellido()
    {
        return resolucionesApellidoALabel.getText();
    }

    public void setRDni(String dni)
    {
        resolucionesDniALabel.setText(dni);
    }

    public String getRDni()
    {
        return resolucionesDniALabel.getText();
    }

    public void setNota(String nota)
    {
        resolucionesNotaField.setText(nota);
    }

    public String getNota()
    {
        return resolucionesNotaField.getText();
    }
}